//
//  JavaCalendar.h
//
//  Created by GaoShin on 2020/6/28.
//

#import <Foundation/Foundation.h>
#import "JavaDate.h"

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger,JavaCalendarFieldType) {
    JavaCalendarFieldTypeYear,
    JavaCalendarFieldTypeMonth,
    JavaCalendarFieldTypeDate,
    JavaCalendarFieldTypeHourOfDay,
    JavaCalendarFieldTypeMinute,
    JavaCalendarFieldTypeSecond
};

@interface JavaCalendar : NSObject

-(instancetype) initWithNSDate:(NSDate *) date;
-(instancetype) initWithJavaDate:(JavaDate *) javaDate;
-(instancetype) initWithTimeInMillis:(long long) time;

/// 获取JavaDate
-(JavaDate *) getTime;

/// 获取时间戳
-(long long) getTimeInMillis;

/// 设置年月日
/// @param year 年
/// @param month 月
/// @param day 日
-(void) setYear:(NSUInteger) year month:(NSUInteger) month day:(NSUInteger) day;

/// 设置年月日时分
/// @param year 年
/// @param month 月
/// @param day 日
/// @param hourOfDay 时
/// @param minute 分
-(void) setYear:(NSUInteger) year month:(NSUInteger) month day:(NSUInteger) day hourOfDay:(NSUInteger) hourOfDay minute:(NSUInteger) minute;

/// 设置年月日时分
/// @param year 年
/// @param month 月
/// @param day 日
/// @param hourOfDay 时
/// @param minute 分
/// @param second 秒
-(void) setYear:(NSUInteger) year month:(NSUInteger) month day:(NSUInteger) day hourOfDay:(NSUInteger) hourOfDay minute:(NSUInteger) minute second:(NSUInteger) second;

/// 设置时间
/// @param date JavaDate
-(void) setJavaDate:(JavaDate *) date;

/// 设置时间
/// @param date NSDate
-(void) setNSDate:(NSDate *) date;

/// 设置时间戳
/// @param millis 时间戳
-(void) setTimeInMillis:(long) millis;

/// 设置某个字段属性的值
/// @param fieldType 枚举，可选择年，月，日，时，分，秒等
/// @param value 值
-(void) setField:(JavaCalendarFieldType) fieldType withValue:(NSUInteger) value;


/// 获取字段属性的值
/// @param fieldType 枚举，可选择年，月，日，时，分，秒等
-(NSUInteger) getFieldValue:(JavaCalendarFieldType) fieldType;

/**
    给当前的日期时间加上一个偏移值。注意：如果值超过范围，则会自动进行相应调整。举例：若今天是2020年5月31日0点0份0秒，给月份增加1，输出结果为202年6月30日0点0份0秒；若给秒数-1，则输出2020年5月30日23点59分59秒
 */
-(void) field:(JavaCalendarFieldType) fieldType operationAdd:(NSInteger) value;

-(NSUInteger) getActualMinimum:(JavaCalendarFieldType) fieldType;
-(NSUInteger) getActualMaximum:(JavaCalendarFieldType) fieldType;

@end

NS_ASSUME_NONNULL_END
